#include "DateTime.h"
#include "math.h"
#include <iostream>
#include "Comparable.h"
using namespace std;

int main()
{
	int cant;
	int in_anio,in_mes,in_dia,in_hora,in_min;
	cout<<"Programacion 4 tarea 1 \n\n";
    cout << "Introduzca la cantidad de fechas a ordenar: " << endl;
    cin >> cant;
    Comparable **Arreglo = new Comparable* [cant];
    bool err;
    for (int i=0;i<cant;i++)
    {
		err=false;
		while(!err)
		{
			try
			{
				err=true;
				cout<<"Ingrese el anio\n";
				cin>> in_anio;
				if ((in_anio<0) ||(in_anio>9999)) throw 1;
				cout<<"Ingrese el mes\n";
				cin>> in_mes;
				if ((in_mes<0) ||(in_mes>12)) throw 2;
				cout<<"Ingrese el dia\n";
				cin>> in_dia;
				if ((in_dia<0) ||(in_dia>30)) throw 3;
				cout<<"Ingrese la hora\n";
				cin>> in_hora;
				if ((in_hora<0) ||(in_hora>23)) throw 4;
				cout<<"Ingrese los minutos\n";
				cin>> in_min;
				if ((in_min<0) ||(in_min>59)) throw 5;
			}
			catch (int u)
			{
				err=false;
				cout<<"Error: ";
				switch (u)
				{
					case 1:
						cout<<"Año invalido\n";
					break;
					case 2:
						cout<<"Mes invalido\n";
					break;
					case 3:
						cout<<"Dia invalido\n";
					break;
					case 4:
						cout<<"Hora invalida\n";
					break;
					case 5:
						cout<<"Minutos invalidos\n";
					break;
				 }
			}
      
		}
		Arreglo[i]=new DateTime(in_anio, in_mes, in_dia, in_hora, in_min);
    }
    cout<<"Arreglo ingresado:"<<endl;
    for(int i=0;i<cant;i++)
    {
		DateTime *toprint;
		toprint=dynamic_cast<DateTime*>(Arreglo[i]);
  		cout<< *toprint<<endl; 
    }
    Arreglo[0]->ordenar(Arreglo,cant);
    cout<<"Arreglo ordenado:"<<endl;
    for(int i=0;i<cant;i++)
    {
		DateTime *toprint;
		toprint=dynamic_cast<DateTime*>(Arreglo[i]);
  		cout<< *toprint<<endl;
		delete Arreglo[i];	
    }
		delete []Arreglo;
    return 0;
}
